﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using SOM.AbstractDAL;
using SOM.Model;
using SOM.SingletonContext;

namespace SOM.ConcreteDAL
{
    public class EnderecoDAL : AbstractEnderecoDAL
    {
        private SOMEntities _contexto;

        public EnderecoDAL()
        {
            _contexto = new SOMEntities();
        }
        /// <summary>
        /// Retorna todos os endereços
        /// </summary>
        /// <returns>Lista de endereços</returns>
        public override List<Endereco> ReturnAll()
        {
            

            var consulta = from Endereco e in _contexto.EnderecosSet
                           select e;

            return consulta.ToList();
        }

        /// <summary>
        /// Retorna endereço atraves do seu identificador
        /// </summary>
        /// <param name="idEndereco">Código do endereço</param>
        /// <returns>Endereço</returns>
        public override Endereco FindById(int idEndereco)
        {
            

            var consulta = from Endereco e in _contexto.EnderecosSet
                           where e.end_id_endereco.Equals(idEndereco)
                           select e;

            return consulta.First();
        }

        /// <summary>
        /// Insere um endereço
        /// </summary>
        /// <param name="endereco"></param>
        public override void Insert(Endereco endereco)
        {
            

            _contexto.AddToEnderecosSet(endereco);

            _contexto.SaveChanges();
        }

        /// <summary>
        /// Aualiza um endereço
        /// </summary>
        /// <param name="endereco"></param>
        public override void Update(Endereco endereco)
        {
            

            _contexto.SaveChanges();
        }

        /// <summary>
        /// Remove um endereço
        /// </summary>
        /// <param name="endereco"></param>
        public override void Delete(Endereco endereco)
        {
            

            _contexto.DeleteObject(endereco);

            _contexto.SaveChanges();
        }

        /// <summary>
        /// Retorna um endereço a partir de uma usuário.
        /// </summary>
        /// <param name="nickName"></param>
        public override Endereco FindByUsuario(string nickName)
        {
            

            var consulta = from u in _contexto.UsuariosSet
                           where u.usr_ds_nickname.Equals(nickName)
                           select u.end_endereco;

            return consulta.Count() > 0 ? consulta.First() : null;
                           
        }
    }
}
